package ejercicioJFrame15test;

import org.junit.Before;
import org.junit.Test;

import ejerciciosJFrame15.Buscaminas;
import static org.junit.Assert.*;

public class BuscaminasTest {

	private Buscaminas buscaminas;
	
	@Before
	public void setUp() {
		buscaminas=new Buscaminas();
	}
	
	/**
	 * NORMAL. 1 mina
	 */
	@Test
	public void testNumMinasAlrededor01() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 1 mina",1,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 0 minas, sin mina en i,j
	 */
	@Test
	public void testNumMinasAlrededor02() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 0 minas, sin mina en i, j",0,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 0 minas, CON mina en i,j
	 */
	@Test
	public void testNumMinasAlrededor03() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, true, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 0 minas, CON mina en i, j",0,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 2 minas
	 */
	@Test
	public void testNumMinasAlrededor04() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 2 minas, sin mina en i, j",2,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 3 minas
	 */
	@Test
	public void testNumMinasAlrededor05() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 3 minas, sin mina en i, j",3,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 4 minas
	 */
	@Test
	public void testNumMinasAlrededor06() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 4 minas, sin mina en i, j",4,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 5 minas
	 */
	@Test
	public void testNumMinasAlrededor07() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, true, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 5 minas, sin mina en i, j",5,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 6 minas
	 */
	@Test
	public void testNumMinasAlrededor08() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, true, false, false, false},
				{false, false, false, true, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 6 minas, sin mina en i, j",6,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 7 minas
	 */
	@Test
	public void testNumMinasAlrededor09() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, true, false, false, false},
				{false, false, false, true, true, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 7 minas, sin mina en i, j",7,numMinasAlrededorObtenidas);
	}

	/**
	 * NORMAL. 8 minas
	 */
	@Test
	public void testNumMinasAlrededor10() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, true, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 4);
		assertEquals("NORMAL: 8 minas, sin mina en i, j",8,numMinasAlrededorObtenidas);
	}

	/**
	 * ESQUINA. Superior izquierda. 0 minas
	 */
	@Test
	public void testNumMinasAlrededor11() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(0, 0);
		assertEquals("ESQUINA: sup.izq, 0 minas: ",0,numMinasAlrededorObtenidas);
	}

	/**
	 * ESQUINA. Superior derecha. 1 mina
	 */
	@Test
	public void testNumMinasAlrededor12() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, true, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(0, 8);
		assertEquals("ESQUINA: sup.der., 1 mina: ",1,numMinasAlrededorObtenidas);
	}

	/**
	 * ESQUINA. inferior derecha. 2 minas
	 */
	@Test
	public void testNumMinasAlrededor13() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, true, true},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(8, 8);
		assertEquals("ESQUINA: inf.der., 2 minas: ",2,numMinasAlrededorObtenidas);
	}

	/**
	 * ESQUINA. Inferior izquierda. 3 minas
	 */
	@Test
	public void testNumMinasAlrededor15() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{true, true, false, false, false, false, false, false, false},
				{false, true, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(8, 0);
		assertEquals("ESQUINA: inf.izq., 3 minas: ",3,numMinasAlrededorObtenidas);
	}

	/**
	 * LADO. Superior 0 minas
	 */
	@Test
	public void testNumMinasAlrededor14() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(0, 4);
		assertEquals("LADO: superior. 0 minas: ",0,numMinasAlrededorObtenidas);
	}

	/**
	 * LADO. Izquierdo 4 minas
	 */
	@Test
	public void testNumMinasAlrededor16() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{true, true, false, false, false, false, false, false, false},
				{false, true, false, false, false, false, false, false, false},
				{true, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 0);
		assertEquals("LADO: superior. 0 minas: ",4,numMinasAlrededorObtenidas);
	}

	/**
	 * LADO. Derecho 2 minas
	 */
	@Test
	public void testNumMinasAlrededor17() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, true, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, true},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(4, 8);
		assertEquals("LADO: derecho. 2 minas: ",2,numMinasAlrededorObtenidas);
	}

	/**
	 * LADO. inferior 5 minas
	 */
	@Test
	public void testNumMinasAlrededor18() {
		boolean[][] tableroPruebas=
			{
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, false, false, false, false, false, false},
				{false, false, false, true, true, true, false, false, false},
				{false, false, false, true, false, true, false, false, false},
			};
		buscaminas.setArrayMinas(tableroPruebas);
		int numMinasAlrededorObtenidas=buscaminas.testNumMinasAlrededor(8, 4);
		assertEquals("LADO: inferior. 5 minas: ",5,numMinasAlrededorObtenidas);
	}


}
